#ifndef plateforme_H
#define plateforme_H

#include "position.h"

typedef struct
{
    int dim;
    int solide;
    position pos;
    char typeBloc;
}bloc;

typedef struct
{
	int hauteur;
	int largeur;
	bloc*** tab;
	int CP[3];
}terrain;

void initBloc (bloc *newBloc); /* Verifie */
/* Preconditions : newBloc est non NULL */
/* Postconditions : newBloc est initialise */

void supprimeBloc (bloc *oldBloc);
/* Preconditions : oldBloc est initialise et non NULL */
/* Postconditions : oldBloc est NULL */

void initTerrain (terrain *newTerrain); /* Verifie */
/* Preconditions : newTerrain est non NULL */
/* Postconditions : newTerrain est initialise */

void setBloc (bloc *newBloc, int dim, int solide, char c); /* Verifie */
/* Preconditions : newBloc est non NULL et initialise, dim > 0 */
/* Postconditions : newBloc contient toutes les valeurs indiquees en parametres */

void copieBloc (bloc* B1, bloc* B2); /* Verifie */
/* Preconditions : B1 existe contient des informations, B2 est non NULL et initialise */
/* Postconditions : B2 contient les mêmes informations que B1 */

void setTerrain (terrain *Niveau, char* nomMap, const int dimBloc); /* Verifie */
/* Preconditions : Niveau est non NULL et initialise, nomMap est un nom de fichier .txt existant, dimBloc > 0 */
/* Postconditions : Niveau possede une largeur > 0, une hauteur > 0 et son tab pointe sur des bloc de dimension dimBloc*dimBloc */

void setPosition (bloc* hitBox, const int x, const int y); /* Verifie */
/* Preconditions : hitBox est non NULL et initialise, x >= 0, y >= 0 */
/* Postconditions : La position de hitBox prend les valeurs x et y indiquees */

void blocMouvement (bloc* hitBox, const int x, const int y); /* Verifie */
/* Preconditions : hitBox est non NULL et initialise */
/* Postconditions : L'abscisse de hitBox augmente de x et son ordonnee augmente de y */

float getPositionX (bloc* hitBox); /* Verifie */
/* Preconditions : hitBox est non NULL et initialise */
/* Postconditions : Retourne l'abscisse de hitBox */

float getPositionY (bloc* hitBox); /* Verifie */
/* Preconditions : hitBox est non NULL et initialise */
/* Postconditions : Retourne l'abscisse de hitBox */

void videTerrain (terrain* Niveau);
/* Preconditions : Niveau est non NULL et rempli */
/* Postconditions : La largeur de Niveau, la hauteur de Niveau et son tableau de bloc sont nuls */

void terrainTestRegression(); /* Permet de verifier toutes les fonctions ci-dessus */

#endif
